package com.zp.self.module.level_4_算法练习.数据结构.栈与队列;

import java.util.Stack;

public class 力扣_20_有效的括号 {

    public static void main(String[] args) {
        System.out.println(new 力扣_20_有效的括号().isValid("()"));
        System.out.println(new 力扣_20_有效的括号().isValid("([)]"));
        System.out.println(new 力扣_20_有效的括号().isValid("{[]}"));
        System.out.println(new 力扣_20_有效的括号().isValid("(])"));
    }
    /**
     题目：给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
     有效字符串需满足：
     左括号必须用相同类型的右括号闭合。
     左括号必须以正确的顺序闭合。
      
     示例 1：
     输入：s = "()"
     输出：true

     示例 2：
     输入：s = "()[]{}"
     输出：true

     示例 3：
     输入：s = "(]"
     输出：false

     示例 4：
     输入：s = "([)]"
     输出：false

     分析：
     1.通过Stack栈 记录下一个需要进来的括号

     边界值 & 注意点：
     1.
     **/
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c =='(')      stack.push(')');
            else if(c =='[') stack.push(']');
            else if(c =='{') stack.push('}');
            else{
                if(stack.isEmpty() || stack.peek()!=c) return false;
                else stack.pop();
            }
        }
        return stack.isEmpty();
    }
}